
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
	<title>YUI Library Examples: Focus Manager Node Plugin: Accessible Menu Button</title>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    	<link rel="stylesheet" type="text/css" href="../../assets/yui.css" >

<style>
    /*Supplemental CSS for the YUI distribution*/
    #custom-doc { width: 95%; min-width: 950px; }
    #pagetitle {background-image: url(../../assets/bg_hd.gif);}
/*    #pagetitle h1 {background-image: url(../../assets/title_h_bg.gif);}*/
</style>

<link rel="stylesheet" type="text/css" href="../../assets/dpSyntaxHighlighter.css">
<link type="text/css" rel="stylesheet" href="../../build/cssfonts/fonts-min.css" />
<script type="text/javascript" src="../../build/yui/yui-min.js"></script>
<style type="text/css">

	/*	The following two styles are necessary to override style rules in the 
		YUI CSS file. */

	#example ul {
		margin: 0;
	}

	#example a:hover {
		text-decoration: none;
	}


	/*	Hide the list while it is being transformed into a menu.	*/

	.yui-loading #menu-1,
	.yui-loading #button-1 {
		display: none;
	}
	
</style>

<script type="text/javascript">

	//	Add a class to the documentElement to prevent the user from seeing 
	//	the unstyled menu while the necessary CSS and JavaScript 
	//	dependancies are being fetched.

	document.documentElement.className = "yui-loading";

</script>
</head>
<body id="yahoo-com" class=" yui-skin-sam">
<div id="custom-doc" class="yui-t2">
<div id="hd">
	<div id="ygunav">
		<p>
            <em>
                <a href="http://developer.yahoo.com/yui/3/">YUI 3.x Home</a> <i> - </i>	
            </em>
		</p>
		<form action="http://search.yahoo.com/search" id="sitesearchform">
            <input name="vs" type="hidden" value="developer.yahoo.com">
            <input name="vs" type="hidden" value="yuiblog.com">
		    <div id="sitesearch">
		    	<label for="searchinput">Site Search (YDN &amp; YUIBlog): </label>
			    <input type="text" id="searchinput" name="p">
			    <input type="submit" value="Search" id="searchsubmit" class="ygbt">
		    </div>
		</form>
    </div>
	<div id="ygma"><a href="../../"><img src="../../assets/logo.gif"  border="0" width="200" height="93"></a></div>
	<div id="pagetitle"><h1>YUI Library Examples: Focus Manager Node Plugin: Accessible Menu Button</h1></div>
</div>
<div id="bd">

	<div id="bar-note"><p><strong>Note:</strong> This is YUI 3.x. Looking for <a href="http://developer.yahoo.com/yui/">YUI 2.x</a>?</p></div>

	<div id="yui-main">
		<div class="yui-b">
		  <div class="yui-ge">
			  <div class="yui-u first example" id="main">

	<h2>Focus Manager Node Plugin: Accessible Menu Button</h2>

	<div id="example" class="promo">
	<p>
	<p>
This example illustrates how to use the Focus Manager Node Plugin, 
Event's <a href="../../api/YUI.html#event_delegate">delegation support</a> and 
<a href="../../api/YUI.html#event_mouseenter">mouseenter</a> event, along with 
the <a href="../../overlay/">Overlay widget</a> and Node's support for the 
<a href="http://www.w3.org/TR/wai-aria/">WAI-ARIA Roles and States</a> to
create an accessible menu button.
</p>	</p>	

	<div class="module example-container ">
			<div class="hd exampleHd">
			<p class="newWindowButton yui-skin-sam">
                <a href="node-focusmanager-3_clean.html" target="_blank">View example in new window.</a>
            </p>
		</div>		<div id="example-canvas" class="bd">

		
	<!--BEGIN SOURCE CODE FOR EXAMPLE =============================== -->
	
	<a id="button-1" href="#menu-1"><span><span>Move To</span></span></a>
<div id="menu-1">
	<ul>
		<li><input type="button" name="button-1" value="Inbox"></li>
		<li><input type="button" name="button-2" value="Archive"></li>
		<li><input type="button" name="button-3" value="Trash"></li>
	</ul>        	
</div>

<!-- YUI Seed -->
<script type="text/javascript" src="../../build/yui/yui.js"></script>
<script type="text/javascript">

	YUI({	
		base:"../../build/", 
		timeout: 10000,
		modules: {
			"menubutton-css": {
				type: "css",
				fullpath: "assets/menubutton.css"
			}    
		}

	}).use("menubutton-css", "node-focusmanager", "node-event-simulate", "overlay", function(Y) {

		var menuButton = Y.Node.get("#button-1"),
			menu;


		var initMenu = function () {

			menu = new Y.Overlay({
				contentBox: "#menu-1",
				visible: false,
				tabIndex: null
			});

			menu.render();


			Y.Node.get("#menu-1").setStyle("display", "");

			var boundingBox = menu.get("boundingBox"),
				contentBox = menu.get("contentBox");

			boundingBox.addClass("yui-buttonmenu");
			contentBox.addClass("yui-buttonmenu-content");


			// Append a decorator element to the bounding box to render the shadow.

			boundingBox.appendChild(Y.Node.create('<div class="yui-menu-shadow"></div>'));

			
			//	Apply the ARIA roles, states and properties to the menu.

			boundingBox.setAttrs({
				role: "menu",
				"aria-labelledby": menuButton.get("id")
			});

			boundingBox.queryAll("input").set("role", "menuitem");


			//	For NVDA: Add the role of "presentation" to each LI 
			//	element to prevent NVDA from announcing the 
			//	"listitem" role.

			boundingBox.queryAll("div,ul,li").set("role", "presentation");
			

			//	Use the FocusManager Node Plugin to manage the focusability
			//	of each menuitem in the menu.

			contentBox.plug(Y.Plugin.NodeFocusManager, { 

					descendants: "input",
					keys: { next: "down:40", // Down arrow
							previous: "down:38" },	// Up arrow
					focusClass: {
						className: "yui-menuitem-active",
						fn: function (node) {
							return node.get("parentNode");
						}
					},
					circular: true

				});


			//	Subscribe to the change event for the "focused" attribute
			//	to listen for when the menu initially gains focus, and 
			//	when the menu has lost focus completely.

			contentBox.focusManager.after("focusedChange", function (event) {

				if (!event.newVal) {	// The menu has lost focus

					//	Set the "activeDescendant" attribute to 0 when the 
					//	menu is hidden so that the user can tab from the 
					//	button to the first item in the menu the next time 
					//	the menu is made visible.
					
					this.set("activeDescendant", 0);

				}

			});
			

			//	Hide the button's menu if the user presses the escape key
			//	while focused either on the button or its menu.

			Y.on("key", function () {

				menu.hide();
				menuButton.focus();				

			}, [menuButton, boundingBox] ,"down:27");
			

			if (Y.UA.ie === 6) {

				//	Set the width and height of the menu's bounding box -  
				//	this is necessary for IE 6 so that the CSS for the 
				//	shadow element can simply set the shadow's width and 
				//	height to 100% to ensure that dimensions of the shadow 
				//	are always sync'd to the that of its parent menu.

				menu.on("visibleChange", function (event) {

					if (event.newVal) {

						boundingBox.setStyles({ height: "", width: "" });

						boundingBox.setStyles({ 
							height: (boundingBox.get("offsetHeight") + "px"), 
							width: (boundingBox.get("offsetWidth") + "px") });
					
					}
				
				});
			
			}


			menu.after("visibleChange", function (event) {
			
				var bVisible = event.newVal;
			
				//	Focus the first item when the menu is made visible
				//	to allow users to navigate the menu via the keyboard
				
				if (bVisible) {

					//	Need to set focus via a timer for Webkit and Opera
					Y.Lang.later(0, contentBox.focusManager, contentBox.focusManager.focus);
					
				}

				boundingBox.set("aria-hidden", (!bVisible));
				
			});				
			

			//	Hide the menu when one of menu items is clicked.

			Y.on("delegate", function (event) {

				var oTarget = event.currentTarget;
				
				alert("You clicked " + oTarget.query("input").get("value"));
			
				contentBox.focusManager.blur();
				menu.hide();

			}, boundingBox, "click", "li");
			

			//	Focus each menuitem as the user moves the mouse over 
			//	the menu.

			Y.on("mouseenter", function (event) {

				var focusManager = contentBox.focusManager;

				if (focusManager.get("focused")) {
					focusManager.focus(event.currentTarget.query("input"));
				}

			}, boundingBox, "li");
			

			//	Hide the menu if the user clicks outside of it or if the 
			//	user doesn't click on the button

			boundingBox.get("ownerDocument").on("mousedown", function (event) {
				
				var oTarget = event.currentTarget;
				
				if (!oTarget.compareTo(menuButton) && 
					!menuButton.contains(oTarget) && 
					!oTarget.compareTo(boundingBox) && 
					!boundingBox.contains(oTarget)) {

					menu.hide();

				}
				
			});
			
		};


		menuButton.addClass("yui-menubutton");


		//	Hide the list until it is transformed into a menu
		
		Y.Node.get("#menu-1").setStyle("display", "none");


		//	Remove the "yui-loading" class from the documentElement
		//	now that the necessary YUI dependencies are loaded.

		menuButton.get("ownerDocument").get("documentElement").removeClass("yui-loading");
		

		//	Apply the ARIA roles, states and properties to the anchor.

		menuButton.setAttrs({
			role: "button",
			"aria-haspopup": true
		});


		//	Remove the "href" attribute from the anchor element to  
		//	prevent JAWS and NVDA from reading the value of the "href"
		//	attribute when the anchor is focused.
		
		if ((Y.UA.gecko || Y.UA.ie) && navigator.userAgent.indexOf("Windows") > -1) {

			menuButton.removeAttribute("href");

			//	Since the anchor's "href" attribute has been removed, the 
			//	element will not fire the click event in Firefox when the 
			//	user presses the enter key.  To fix this, dispatch the 
			//	"click" event to the anchor when the user presses the 
			//	enter key.

			Y.on("key", function (event) {

				event.currentTarget.simulate("click");

			}, menuButton, "down:13");

		}


		//	Set the "tabIndex" attribute of the anchor element to 0 to 
		//	place it in the browser's default tab flow.  This is 
		//	necessary since 1) anchor elements are not in the default 
		//	tab flow in Opera and 2) removing the "href" attribute  
		//	prevents the anchor from firing its "click" event 
		//	in Firefox.

		menuButton.set("tabIndex", 0);


		var showMenu = function (event) {

			//	For performance: Defer the creation of the menu until 
			//	the first time the button is clicked.

			if (!menu) {
				initMenu();
			}


			if (!menu.get("visible")) {

                menu.set("align", {
                    node: menuButton,
                    points: [Y.WidgetPositionExt.TL, Y.WidgetPositionExt.BL]
                });

				menu.show();

			}

			//	Prevent the anchor element from being focused 
			//	when the users mouses down on it.
			event.preventDefault();

		}; 


		//	Bind both a "mousedown" and "click" event listener to 
		//	ensure the button's menu can be invoked using both the 
		//	mouse and the keyboard.
		
		menuButton.on("mousedown", showMenu);
		menuButton.on("click", showMenu);

	});

</script>
	
	<!--END SOURCE CODE FOR EXAMPLE =============================== -->
	
		
		</div>
	</div>			
	</div>
		
	<h3>Setting Up the HTML</h3>
<p>
For a menu button, start with an <code>&#60;a&#62;</code> element whose 
<code>href</code> attribute is set to the id of an <code>&#60;div&#62;</code> 
that wraps a list of <code>&#60;input&#62;</code> elements.  
Therefore, without JavaScript and CSS, the menu button is simply an in-page 
link to a set of additional buttons.
</p>
<textarea name="code" class="HTML" cols="60" rows="1">
<a id="button-1" href="#menu-1"><span><span>Move To</span></span></a>
<div id="menu-1">
	<ul>
		<li><input type="button" name="button-1" value="Inbox"></li>
		<li><input type="button" name="button-2" value="Archive"></li>
		<li><input type="button" name="button-3" value="Trash"></li>
	</ul>        	
</div>
</textarea>


<h3>Progressive Enhancement</h3>
<p>
The markup above will be transformed into a menu button widget using both CSS 
and JavaScript.  To account for the scenario where the user has CSS enabled in 
their browser but JavaScript is disabled, the CSS used to style the menu button  
will be loaded via JavaScript using the 
<a href="http://developer.yahoo.com/yui/3/yui/#loader">built-in loader of the YUI Global Object</a>.
Additionally, JavaScript will be used to temporarily hide the menu button markup 
while the JavaScript and CSS are in the process of loading to prevent the user 
from seeing a flash unstyled content.
</p>


<h3>ARIA Support</h3>
<p>
Through the use of CSS and JavaScript the HTML for the menu button can be 
transformed into something that looks and behaves like a desktop menu button, 
but users of screen readers won't perceive it as an atomic widget, but rather 
simply as a set of HTML elements.  However, through the application
of the 
<a href="http://www.w3.org/TR/wai-aria/">WAI-ARIA Roles and States</a>, it is 
possible to improve the semantics of the markup such that users of screen 
readers perceive it as a menu button control.  
</p>


<h3>Keyboard Functionality</h3>
<p>
The keyboard functionality for the button's menu will be provided by the Focus 
Manager Node Plugin.  The Focus Manager's 
<a href="../../api/plugin.NodeFocusManager.html#config_descendants"><code>descendants</code></a> 
attribute is set to a value of "input", so that only one menuitem in the 
button's menu  is in the browser's default tab flow.  This allows users 
navigating via the keyboard to use the tab key to quickly move into and out of 
the menu.  Once the menu has focus, the user can move focus among each menuitem 
using the up and down arrows keys, as defined by the value of the 
<a href="../../api/plugin.NodeFocusManager.html#config_keys"><code>keys</code></a> 
attribute.  The 
<a href="../../api/plugin.NodeFocusManager.html#config_focusClass"><code>focusClass</code></a> 
attribute is used to apply a class of <code>yui-menuitem-active</code> to 
the parent <code>&#60;li&#62;</code> of each 
<code>&#60;input&#62;</code> when it is focused, making it easy to style the 
menuitem's focused state in each of the 
<a href="http://developer.yahoo.com/yui/articles/gbs/#gbschart">A-Grade browsers</a>.

<textarea name="code" class="JScript" cols="60" rows="1">
YUI({	
	base:"../../build/", 
	timeout: 10000,
	modules: {
		"menubutton-css": {
			type: "css",
			fullpath: "assets/menubutton.css"
		}    
	}

}).use("menubutton-css", "node-focusmanager", "node-event-simulate", "overlay", function(Y) {

	var menuButton = Y.Node.get("#button-1"),
		menu;


	var initMenu = function () {

		menu = new Y.Overlay({
			contentBox: "#menu-1",
			visible: false,
			tabIndex: null
		});

		menu.render();


		Y.Node.get("#menu-1").setStyle("display", "");

		var boundingBox = menu.get("boundingBox"),
			contentBox = menu.get("contentBox");

		boundingBox.addClass("yui-buttonmenu");
		contentBox.addClass("yui-buttonmenu-content");


		// Append a decorator element to the bounding box to render the shadow.

		boundingBox.appendChild(Y.Node.create('<div class="yui-menu-shadow"></div>'));

		
		//	Apply the ARIA roles, states and properties to the menu.

		boundingBox.setAttrs({
			role: "menu",
			"aria-labelledby": menuButton.get("id")
		});

		boundingBox.queryAll("input").set("role", "menuitem");


		//	For NVDA: Add the role of "presentation" to each LI 
		//	element to prevent NVDA from announcing the 
		//	"listitem" role.

		boundingBox.queryAll("div,ul,li").set("role", "presentation");
		

		//	Use the FocusManager Node Plugin to manage the focusability
		//	of each menuitem in the menu.

		contentBox.plug(Y.Plugin.NodeFocusManager, { 

				descendants: "input",
				keys: { next: "down:40", // Down arrow
						previous: "down:38" },	// Up arrow
				focusClass: {
					className: "yui-menuitem-active",
					fn: function (node) {
						return node.get("parentNode");
					}
				},
				circular: true

			});


		//	Subscribe to the change event for the "focused" attribute
		//	to listen for when the menu initially gains focus, and 
		//	when the menu has lost focus completely.

		contentBox.focusManager.after("focusedChange", function (event) {

			if (!event.newVal) {	// The menu has lost focus

				//	Set the "activeDescendant" attribute to 0 when the 
				//	menu is hidden so that the user can tab from the 
				//	button to the first item in the menu the next time 
				//	the menu is made visible.
				
				this.set("activeDescendant", 0);

			}

		});
		

		//	Hide the button's menu if the user presses the escape key
		//	while focused either on the button or its menu.

		Y.on("key", function () {

			menu.hide();
			menuButton.focus();				

		}, [menuButton, boundingBox] ,"down:27");
		

		if (Y.UA.ie === 6) {

			//	Set the width and height of the menu's bounding box -  
			//	this is necessary for IE 6 so that the CSS for the 
			//	shadow element can simply set the shadow's width and 
			//	height to 100% to ensure that dimensions of the shadow 
			//	are always sync'd to the that of its parent menu.

			menu.on("visibleChange", function (event) {

				if (event.newVal) {

					boundingBox.setStyles({ height: "", width: "" });

					boundingBox.setStyles({ 
						height: (boundingBox.get("offsetHeight") + "px"), 
						width: (boundingBox.get("offsetWidth") + "px") });
				
				}
			
			});
		
		}


		menu.after("visibleChange", function (event) {
		
			var bVisible = event.newVal;
		
			//	Focus the first item when the menu is made visible
			//	to allow users to navigate the menu via the keyboard
			
			if (bVisible) {

				//	Need to set focus via a timer for Webkit and Opera
				Y.Lang.later(0, contentBox.focusManager, contentBox.focusManager.focus);
				
			}

			boundingBox.set("aria-hidden", (!bVisible));
			
		});				
		

		//	Hide the menu when one of menu items is clicked.

		Y.on("delegate", function (event) {

			var oTarget = event.currentTarget;
			
			alert("You clicked " + oTarget.query("input").get("value"));
		
			contentBox.focusManager.blur();
			menu.hide();

		}, boundingBox, "click", "li");
		

		//	Focus each menuitem as the user moves the mouse over 
		//	the menu.

		Y.on("mouseenter", function (event) {

			var focusManager = contentBox.focusManager;

			if (focusManager.get("focused")) {
				focusManager.focus(event.currentTarget.query("input"));
			}

		}, boundingBox, "li");
		

		//	Hide the menu if the user clicks outside of it or if the 
		//	user doesn't click on the button

		boundingBox.get("ownerDocument").on("mousedown", function (event) {
			
			var oTarget = event.currentTarget;
			
			if (!oTarget.compareTo(menuButton) && 
				!menuButton.contains(oTarget) && 
				!oTarget.compareTo(boundingBox) && 
				!boundingBox.contains(oTarget)) {

				menu.hide();

			}
			
		});
		
	};


	menuButton.addClass("yui-menubutton");


	//	Hide the list until it is transformed into a menu
	
	Y.Node.get("#menu-1").setStyle("display", "none");


	//	Remove the "yui-loading" class from the documentElement
	//	now that the necessary YUI dependencies are loaded.

	menuButton.get("ownerDocument").get("documentElement").removeClass("yui-loading");
	

	//	Apply the ARIA roles, states and properties to the anchor.

	menuButton.setAttrs({
		role: "button",
		"aria-haspopup": true
	});


	//	Remove the "href" attribute from the anchor element to  
	//	prevent JAWS and NVDA from reading the value of the "href"
	//	attribute when the anchor is focused.
	
	if ((Y.UA.gecko || Y.UA.ie) && navigator.userAgent.indexOf("Windows") > -1) {

		menuButton.removeAttribute("href");

		//	Since the anchor's "href" attribute has been removed, the 
		//	element will not fire the click event in Firefox when the 
		//	user presses the enter key.  To fix this, dispatch the 
		//	"click" event to the anchor when the user presses the 
		//	enter key.

		Y.on("key", function (event) {

			event.currentTarget.simulate("click");

		}, menuButton, "down:13");

	}


	//	Set the "tabIndex" attribute of the anchor element to 0 to 
	//	place it in the browser's default tab flow.  This is 
	//	necessary since 1) anchor elements are not in the default 
	//	tab flow in Opera and 2) removing the "href" attribute  
	//	prevents the anchor from firing its "click" event 
	//	in Firefox.

	menuButton.set("tabIndex", 0);


	var showMenu = function (event) {

		//	For performance: Defer the creation of the menu until 
		//	the first time the button is clicked.

		if (!menu) {
			initMenu();
		}


		if (!menu.get("visible")) {

               menu.set("align", {
                   node: menuButton,
                   points: [Y.WidgetPositionExt.TL, Y.WidgetPositionExt.BL]
               });

			menu.show();

		}

		//	Prevent the anchor element from being focused 
		//	when the users mouses down on it.
		event.preventDefault();

	}; 


	//	Bind both a "mousedown" and "click" event listener to 
	//	ensure the button's menu can be invoked using both the 
	//	mouse and the keyboard.
	
	menuButton.on("mousedown", showMenu);
	menuButton.on("click", showMenu);

});
</textarea>
				</div>
				<div class="yui-u sidebar">
					
				
					<div id="examples" class="mod box4">
                        <div class="hd">
						<h4>
    Focus Manager Node Plugin Examples:</h4>
                        </div>
						<div class="bd">
							<ul>
								<li><a href='../node-focusmanager/node-focusmanager-1.html'>Accessible Toolbar</a></li><li><a href='../node-focusmanager/node-focusmanager-2.html'>Accessible TabView</a></li><li class='selected'><a href='../node-focusmanager/node-focusmanager-3.html'>Accessible Menu Button</a></li>							</ul>
						</div>
					</div>
					
					<div class="mod box4">
                        <div class="hd">
						<h4>More Focus Manager Node Plugin Resources:</h4>
                        </div>
                        <div class="bd">
						<ul>
							<!-- <li><a href="http://developer.yahoo.com/yui/node-focusmanager/">User's Guide</a> (external)</li> -->
						<li><a href="../../api/module_node-focusmanager.html">API Documentation</a></li>
</ul>
                        </div>
					</div>
			  </div>
		</div>
		
		</div>
	</div>


<div class="yui-b toc3" id="tocWrapper">
<!-- TABLE OF CONTENTS -->
<div id="toc">
	
<ul>
<li class="sect first">YUI 3.x Project</li><li class="item"><a title="The Yahoo! User Interface (YUI) Library, 3.x Branch, " href="http://developer.yahoo.com/yui/3/">YUI 3 Web Site (external)</a></li><li class="item"><a title="Examples of every YUI utility and control in action" href="../../examples/">YUI 3 Examples</a></li><li class="item"><a title="Instantly searchable API documentation for the entire YUI library." href="../../api/">YUI 3 API Docs</a></li><li class="item"><a title="The YUI Library can be downloaded from SourceForge" href="http://sourceforge.net/projects/yui/">YUI 3 on Sourceforge (external)</a></li><li class="item"><a title="YUI is free and open, offered under a BSD license." href="http://developer.yahoo.com/yui/3/license.html">YUI License (external)</a></li><li class="sect">YUI 3 Core - Examples</li><li class="item"><a title="YUI (Global Prerequisite) - Functional Examples" href="../../examples/yui/index.html">YUI (Global Prerequisite)</a></li><li class="item"><a title="Event - Functional Examples" href="../../examples/event/index.html">Event</a></li><li class="item"><a title="Node - Functional Examples" href="../../examples/node/index.html">Node</a></li><li class="sect">YUI 3 Component Infrastructure - Examples</li><li class="item"><a title="Attribute - Functional Examples" href="../../examples/attribute/index.html">Attribute</a></li><li class="item"><a title="Plugin - Functional Examples" href="../../examples/plugin/index.html">Plugin</a></li><li class="item"><a title="Widget - Functional Examples" href="../../examples/widget/index.html">Widget</a></li><li class="sect">YUI 3 Utilities - Examples</li><li class="item"><a title="Animation - Functional Examples" href="../../examples/anim/index.html">Animation</a></li><li class="item"><a title="Cache - Functional Examples" href="../../examples/cache/index.html">Cache</a></li><li class="item"><a title="Cookie - Functional Examples" href="../../examples/cookie/index.html">Cookie</a></li><li class="item"><a title="DataSchema - Functional Examples" href="../../examples/dataschema/index.html">DataSchema</a></li><li class="item"><a title="DataSource - Functional Examples" href="../../examples/datasource/index.html">DataSource</a></li><li class="item"><a title="DataType - Functional Examples" href="../../examples/datatype/index.html">DataType</a></li><li class="item"><a title="Drag &amp; Drop - Functional Examples" href="../../examples/dd/index.html">Drag &amp; Drop</a></li><li class="item"><a title="Get - Functional Examples" href="../../examples/get/index.html">Get</a></li><li class="item"><a title="History - Functional Examples" href="../../examples/history/index.html">History</a></li><li class="item"><a title="ImageLoader - Functional Examples" href="../../examples/imageloader/index.html">ImageLoader</a></li><li class="item"><a title="IO - Functional Examples" href="../../examples/io/index.html">IO</a></li><li class="item"><a title="JSON (JavaScript Object Notation) - Functional Examples" href="../../examples/json/index.html">JSON</a></li><li class="item"><a title="Queue - Functional Examples" href="../../examples/queue/index.html">Queue</a></li><li class="item"><a title="Stylesheet - Functional Examples" href="../../examples/stylesheet/index.html">Stylesheet</a></li><li class="sect">YUI 3 Widgets - Examples</li><li class="item"><a title="Overlay - Functional Examples" href="../../examples/overlay/index.html">Overlay</a></li><li class="item"><a title="Slider - Functional Examples" href="../../examples/slider/index.html">Slider</a></li><li class="sect">YUI 3 Node Plugins - Examples</li><li class="item"><a title="FocusManager Node Plugin - Functional Examples" href="../../examples/node-focusmanager/index.html">FocusManager Node Plugin</a></li><li class="item"><a title="MenuNav Node Plugin - Functional Examples" href="../../examples/node-menunav/index.html">MenuNav Node Plugin</a></li><li class="sect">YUI 3 CSS - Examples</li><li class="item"><a title="YUI CSS Reset - Functional Examples" href="../../examples/cssreset/index.html">CSS Reset</a></li><li class="item"><a title="YUI Fonts - Functional Examples" href="../../examples/cssfonts/index.html">CSS Fonts</a></li><li class="item"><a title="YUI Base - Functional Examples" href="../../examples/cssbase/index.html">CSS Base</a></li><li class="sect">YUI 3 Developer Tools - Examples</li><li class="item"><a title="Console - Functional Examples" href="../../examples/console/index.html">Console</a></li><li class="item"><a title="Profiler - Functional Examples" href="../../examples/profiler/index.html">Profiler</a></li><li class="item"><a title="Test - Functional Examples" href="../../examples/test/index.html">Test</a></li><li class="sect">The YUI Community</li><li class="item"><a title="The Yahoo! User Interface Blog" href="http://yuiblog.com">YUI Blog (external)</a></li><li class="item"><a title="The Yahoo! Group YDN-JavaScript hosts the YUI community forum" href="http://tech.groups.yahoo.com/group/ydn-javascript/">YUI Forum (external)</a></li><li class="item"><a title="The Yahoo! Group yui3 is dedicated to the 3.x branch of the Yahoo! User Interface (YUI) Library." href="http://tech.groups.yahoo.com/group/yui3/">YUI 3 Forum (external)</a></li><li class="item"><a title="YUI is used by Yahoo! and by hundreds of other sites, including many you know and love." href="/yui/poweredby/">YUI Sightings (external)</a></li><li class="item"><a title="Videos and podcasts from the YUI Team and from the Yahoo! frontend engineering community." href="http://developer.yahoo.com/yui/theater/">YUI Theater (external)</a></li><li class="sect">YUI Articles on the YUI Website</li><li class="item"><a title="Answers to Frequently Asked Questions about the YUI Library" href="http://developer.yahoo.com/yui/articles/faq/">YUI FAQ (external)</a></li><li class="item"><a title="Yahoo!'s philosophy of Graded Browser Support" href="http://developer.yahoo.com/yui/articles/gbs/">Graded Browser Support (external)</a></li><li class="item"><a title="Reporting Bugs and Making Feature Requests for YUI Components" href="http://developer.yahoo.com/yui/articles/reportingbugs/">Bug Reports/Feature Requests (external)</a></li><li class="item"><a title="Serve YUI source files from Yahoo! -- free, fast, and simple" href="http://developer.yahoo.com/yui/3/articles/hosting/">Serving YUI Files from Yahoo! (external)</a></li></ul>
</div>
</div>
	</div><!--closes bd-->

	<div id="ft">
        <p class="first">Copyright &copy; 2009 Yahoo! Inc. All rights reserved.</p>
        <p><a href="http://privacy.yahoo.com/privacy/us/devel/index.html">Privacy Policy</a> - 
            <a href="http://docs.yahoo.com/info/terms/">Terms of Service</a> - 
            <a href="http://docs.yahoo.com/info/copyright/copyright.html">Copyright Policy</a> - 
            <a href="http://careers.yahoo.com/">Job Openings</a></p>
	</div>
</div>
<script src="../../assets/dpSyntaxHighlighter.js"></script>
<script language="javascript"> 
dp.SyntaxHighlighter.HighlightAll('code'); 
</script>
</body>
</html>
